const fs = require("fs");
const path = require("path");
const rimraf = require("rimraf");
const execSyncData = require("child_process").execSync;
const dayjs = require("dayjs");
const JSZip = require("jszip");

/**
 * 打包项目
 * @param type test | prod
 */
// @ts-ignore
function buildProjectFun(type) {
  execSyncData("git pull", { stdio: "inherit" });

  //拼接用来读取的文件路径，当前路径加上config.js
  const pathName = path.join(__dirname, "./package.json");

  //创建可读流
  let rs = fs.readFileSync(pathName, "utf8");

  const packageJson = JSON.parse(rs);
  const packageVersion = packageJson.version;

  // 获取本次提交的commit
  const commit = execSyncData("git log -1 --pretty=%B").toString().trim();
  // 描述由本地版本号，时间，commit组成
  const description = `${packageVersion} ${new Date().toLocaleString()} ${commit}`;
  // 修改package.json中的版本号
  packageJson.version = packageVersion;
  // 修改package.json中的描述
  packageJson.description = description;
  // 获取当前的时间，转成yyyymmddhhmmss的格式
  const date = dayjs().format("HHmm");
  // 如果是测试 则 修改版本号为版本号 + 提交的id
  if (type === "test") {
    packageJson.version = `${packageVersion}.${date}`;
  } else {
    // 生产环境，版本号 + 1
    const versionArr = packageVersion.split(".");
    versionArr[versionArr.length - 1] =
      Number(versionArr[versionArr.length - 1]) + 1;
    packageJson.version = versionArr.join(".");
  }
  // 将packageJson写入文件
  fs.writeFileSync(pathName, JSON.stringify(packageJson, null, 2));
  if (type === "master") {
    // packageJson 转字符串
    const newStr = JSON.stringify(packageJson, null, 2);
    // 把newStr中的@SCYF_APP_VERSION@替换成版本号
    const newStr2 = newStr.replace(/@SCYF_APP_VERSION@/g, packageJson.version);
    // 写到package.json中
    fs.writeFileSync(pathName, newStr2);
    execSyncData("pnpm run build:mp-toutiao", { stdio: "inherit" });
  } else {
    execSyncData("yarn build:chrome-test", { stdio: "inherit" });
  }
  // 如果是测试恢复下对package.json的修改
  if (type === "test") {
    fs.writeFileSync(pathName, rs);
  }
  if (type === "prod") {
    fs.writeFileSync(pathName, JSON.stringify(packageJson, null, 2));
  }
  // 如果是prod需要将代码提交上去
  if (type === "prod") {
    execSyncData("git add .", { stdio: "inherit" });
    execSyncData(`git commit -m "${description}"`, { stdio: "inherit" });
    execSyncData("git push", { stdio: "inherit" });
  }
}

function deleteFolder(path) {
  if (fs.existsSync(path)) {
    fs.readdirSync(path).forEach((file) => {
      const curPath = `${path}/${file}`;
      if (fs.lstatSync(curPath).isDirectory()) {
        // 递归删除文件夹
        deleteFolder(curPath);
      } else {
        // 删除文件
        fs.unlinkSync(curPath);
      }
    });
    fs.rmdirSync(path); // 删除空文件夹
  }
}

// 删除文件
function deleteFile(path) {
  if (fs.existsSync(path)) {
    fs.unlinkSync(path);
  }
}

// 导出上面三个方法
module.exports = {
  buildProjectFun,
  deleteFolder,
  deleteFile,
};
